#include "memio.hpp"

memio :: memio( io_type type , filterList * l )
  : filterIO( type , l )
{
	/* 内存过滤器是一个端点过滤器，不能作为中间过滤器 */
	if( type == mid ) throw type;

	m_data = nullptr;
	m_len = 0;
}

memio::~memio()
{
    	if( m_data != nullptr ) free( m_data );
}

bool memio :: on_forward( size_t len , const char * data , err_code &err , size_t& rlen , char * rd )
{
	if( data != nullptr ){
		m_data = ( char *)data;
		data = nullptr;
		m_len = len;

		rlen = len;
		rd = m_data;
	}

	return true;
}

bool memio :: on_backward( size_t len , const char * data , err_code &err , size_t& rlen , char * rd  )
{
	if( data == nullptr ){
		rlen = 0;
		rd = nullptr;
		return false;
	}
	rlen = len;
	rd = ( char*)data;

	return true;
}
